package com.lch.designpattern.proxy.dynamicproxy.cglib;

import com.lch.designpattern.proxy.dynamicproxy.jdkproxy.Girl;

import net.sf.cglib.core.DebuggingClassWriter;

/**
 * @author: liuchenhui
 * @create: 2019-04-20 22:12
 **/
public class CGlibMeiPaoTest {
    public static void main(String[] args) {

        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Users/lliuchenhui/cglibproxy");

        //JDK是采用读取接口的信息
        //CGLib覆盖父类方法
        //目的：都是生成一个新的类，去实现增强代码逻辑的功能

        //JDK Proxy 对于用户而言，必须要有一个接口实现，目标类相对来说复杂
        //CGLib 可以代理任意一个普通的类，没有任何要求

        //CGLib 生成代理逻辑更复杂，效率,调用效率更高，生成一个包含了所有的逻辑的FastClass，不再需要反射调用
        //JDK Proxy生成代理的逻辑简单，执行效率相对要低，每次都要反射动态调用

        //CGLib 有个坑，CGLib不能代理final的方法
        Girl girl = (Girl) new CGlibMeiPao().getInstance(Girl.class);
        girl.findLove();
    }
}
